
/**
 * Content: Math包常用函数、Random 获取随机数、ThreadLocalRandom 获取随机数
 * --------------------------------------------------
 * Java中的Math函数常用方法总结: https://blog.csdn.net/qq_43842093/article/details/124914395
 * java如何生成随机数: https://blog.csdn.net/shibai906/article/details/89646090
 * JAVA中生成随机数Random VS ThreadLocalRandom性能比较: https://juejin.cn/post/7177029345444593721
 */

import java.util.Random;
import java.util.concurrent.ThreadLocalRandom;

public class java_1000_class_Math_Random {

    public static void main(String[] args) {

        // Math包常用函数
        System.out.println("--------------------Math包常用函数--------------------");

        int myInt1 = 27;
        int myInt2 = 64;

        // 绝对值函数
        System.out.println("Math.abs(myInt1): " + Math.abs(myInt1));

        // 取大值
        System.out.println("Math.max(myInt1, myInt2): " + Math.max(myInt1, myInt2));

        // 取小值
        System.out.println("Math.min(myInt1, myInt2): " + Math.min(myInt1, myInt2));

        // 向上取整
        System.out.println("Math.ceil(myInt1): " + Math.ceil(myInt1));

        // 向下取整
        System.out.println("Math.floor(myInt1): " + Math.floor(myInt1));

        // 平方根函数
        System.out.println("Math.sqrt(myInt1): " + Math.sqrt(myInt2));

        // 立方根函数
        System.out.println("Math.cbrt(myInt1): " + Math.cbrt(myInt2));

        // x 的幂函数 Pow(x, y float64)
        System.out.println("Math.pow(myInt2, 2): " + Math.pow(myInt2, 2));

        // 对数函数
        System.out.println("Math.log(myInt2): " + Math.log(myInt2));

        // 10为底的对数函数
        System.out.println("Math.log10(myInt2): " + Math.log10(myInt2));

        // Random 获取随机数
        System.out.println("--------------------Random 获取随机数--------------------");

        Random random = new Random();

        // 设置随机数种子
//        random.setSeed(10000L);   // 如果这么设置, 那么每次得到的结果都是一样的

        // random.nextInt(): 返回一个随机整数
        System.out.println("random.nextInt(): " + random.nextInt());

        // rand.nextInt(819): 返回一个 0~n 间不包括 n 的非负整数
        System.out.println("random.nextInt(): " + random.nextInt(819));

        // random.nextFloat(): 0-1
        System.out.println("random.nextFloat(): " + random.nextFloat());

        // random.nextDouble(): 0-1
        System.out.println("random.nextDouble(): " + random.nextDouble());

        // ThreadLocalRandom 获取随机数
        System.out.println("--------------------ThreadLocalRandom 获取随机数--------------------");
        // 通过线程间的隔离来减少并发冲突，所以ThreadLocalRandom的性能非常高。

        ThreadLocalRandom random1 = ThreadLocalRandom.current();  // current() 方法返回 ThreadLocalRandom 实例

        // [ThreadLocalRandom] random1.nextInt(): 返回一个随机整数
        System.out.println("[ThreadLocalRandom] random1.nextInt(): " + random1.nextInt());

        // [ThreadLocalRandom] random1.nextDouble(): 返回一个随机整数
        System.out.println("[ThreadLocalRandom] random1.nextDouble(): " + random1.nextDouble());

    }

}
